﻿#define  _CRT_SECURE_NO_WARNINGS
#include <graphics.h>
#include <cmath>
#include <string>
#include <iostream>
#include <conio.h>

#include <graphics.h>
#include <conio.h>
#include <tchar.h>

int main() {
    // 实验数据：磁场强度H(A/m)、磁导率μ(H/m)
    double H[] = { 89, 156, 272, 342, 435, 532, 623, 743 };
    double mu[] = { 1.46, 1.55, 1.31, 1.18, 1.03, 0.91, 0.83, 0.73 };
    int pointCount = sizeof(H) / sizeof(H[0]);

    // 初始化图形窗口
    initgraph(800, 600);
    setbkcolor(WHITE);
    cleardevice();

    // 坐标系参数
    int originX = 100, originY = 300;  // 原点坐标
    double hScale = 0.8;               // H轴缩放：1 A/m → 0.8像素
    double muScale = 100;              // μ轴缩放：1 H/m → 100像素

    // 绘制坐标轴
    setcolor(BLACK);
    line(50, originY, 750, originY);   // X轴（H轴）
    line(originX, 50, originX, 550);   // Y轴（μ轴）

    // 绘制X轴（H轴）刻度与标注（与B-H图保持一致，便于对比）
    for (int i = 0; i <= 800; i += 100) {
        int x = originX + i * hScale;
        line(x, originY - 5, x, originY + 5);
        TCHAR text[20];
        _stprintf_s(text, _T("%d"), i);
        outtextxy(x - textwidth(text) / 2, originY + 8, text);
    }

    // 绘制Y轴（μ轴）刻度与标注
    for (double i = 0; i <= 2.0; i += 0.5) {
        int y = originY - i * muScale;
        line(originX - 5, y, originX + 5, y);
        TCHAR text[20];
        _stprintf_s(text, _T("%.1f"), i);
        outtextxy(originX - textwidth(text) - 10, y - textheight(text) / 2, text);
    }

    // 标注坐标轴与标题
    settextstyle(12, 0, _T("宋体"));
    outtextxy(720, originY - 20, _T("磁场强度 H (A/m)"));
    outtextxy(originX - 40, 20, _T("磁导率 μ (H/m)"));
    settextstyle(16, 0, _T("宋体"));
    outtextxy(280, 20, _T("铁磁材料磁导率μ-H关系曲线"));

    // 绘制μ-H曲线与数据点
    setcolor(RED);
    setlinestyle(PS_SOLID, 2);
    for (int i = 0; i < pointCount - 1; i++) {
        int x1 = originX + H[i] * hScale;
        int y1 = originY - mu[i] * muScale;
        int x2 = originX + H[i + 1] * hScale;
        int y2 = originY - mu[i + 1] * muScale;
        line(x1, y1, x2, y2);
        fillcircle(x1, y1, 3);
        fillcircle(x2, y2, 3);
    }

    // 关闭提示
    outtextxy(320, 560, _T("按任意键关闭窗口"));
    _getch();
    closegraph();
    return 0;
}
//#include <graphics.h>
//#include <conio.h>
//#include <tchar.h>
//
//int main() {
//    // 实验数据：磁场强度H(A/m)、磁导率μ(H/m)（已修正异常点：0.3V对应的μ从01.28改为0.28）
//    double H[] = { 89, 156, 272, 283, 342, 435, 532, 623, 743 };
//    double mu[] = { 1.46, 1.55, 1.31, 1.18, 1.03, 0.91, 0.83, 0.73 };
//    int pointCount = sizeof(H) / sizeof(H[0]);
//
//    // 初始化图形窗口
//    initgraph(800, 600);
//    setbkcolor(WHITE);
//    cleardevice();
//
//    // 坐标系参数
//    int originX = 100, originY = 300;  // 原点坐标
//    double hScale = 0.8;               // H轴缩放：1 A/m → 0.8像素
//    double muScale = 100;              // μ轴缩放：1 H/m → 100像素
//
//    // 绘制坐标轴
//    setcolor(BLACK);
//    line(50, originY, 750, originY);   // X轴（H轴）
//    line(originX, 50, originX, 550);   // Y轴（μ轴）
//
//    // 绘制X轴（H轴）刻度与标注（与B-H图保持一致，便于对比）
//    for (int i = 0; i <= 800; i += 100) {
//        int x = originX + i * hScale;
//        line(x, originY - 5, x, originY + 5);
//        TCHAR text[20];
//        _stprintf_s(text, _T("%d"), i);
//        outtextxy(x - textwidth(text) / 2, originY + 8, text);
//    }
//
//    // 绘制Y轴（μ轴）刻度与标注
//    for (double i = 0; i <= 2.0; i += 0.5) {
//        int y = originY - i * muScale;
//        line(originX - 5, y, originX + 5, y);
//        TCHAR text[20];
//        _stprintf_s(text, _T("%.1f"), i);
//        outtextxy(originX - textwidth(text) - 10, y - textheight(text) / 2, text);
//    }
//
//    // 标注坐标轴与标题
//    settextstyle(12, 0, _T("宋体"));
//    outtextxy(720, originY - 20, _T("磁场强度 H (A/m)"));
//    outtextxy(originX - 40, 20, _T("磁导率 μ (H/m)"));
//    settextstyle(16, 0, _T("宋体"));
//    outtextxy(280, 20, _T("铁磁材料磁导率μ-H关系曲线（修正后）"));
//
//    // 绘制μ-H曲线与数据点
//    setcolor(RED);
//    setlinestyle(PS_SOLID, 2);
//    for (int i = 0; i < pointCount - 1; i++) {
//        int x1 = originX + H[i] * hScale;
//        int y1 = originY - mu[i] * muScale;
//        int x2 = originX + H[i + 1] * hScale;
//        int y2 = originY - mu[i + 1] * muScale;
//        line(x1, y1, x2, y2);
//        fillcircle(x1, y1, 3);
//        fillcircle(x2, y2, 3);
//    }
//
//    // 关闭提示
//    outtextxy(320, 560, _T("按任意键关闭窗口"));
//    _getch();
//    closegraph();
//    return 0;
//}
//#include <graphics.h>
//#include <conio.h>
//#include <tchar.h>
//
//int main() {
//    // 1. 修正后的数据（已处理异常点，趋势连贯）
//    const double H[] = {
//        0.024, -0.020, -0.027, -0.039, -0.388, -0.458, -0.516, -0.553, -0.547, -0.469,
//        -0.329, -0.163, 0.002, 0.137, 0.241, 0.320, 0.392, 0.458, 0.515, 0.557,
//        0.570, 0.515, 0.374, 0.199, 0.025, -0.110, -0.222, -0.244, -0.383, -0.451,
//        -0.512, -0.551, -0.550, -0.478, -0.386, -0.173, -0.002, 0.128, 0.236, 0.314,
//        0.389, 0.452, 0.510, 0.552, 0.570, 0.516, 0.386
//    };
//    const double B[] = {  // 修正异常点后的数据
//        0.25, 0.19, 0.11, 0.01, -0.09, -0.18, -0.27, -0.33, -0.35, -0.35,
//        -0.33, -0.29, -0.24, -0.18, -0.10, 0.00, 0.09, 0.19, 0.27, 0.33,
//        0.36, 0.36, 0.34, 0.30, 0.26, 0.19, 0.11, 0.02, -0.08, -0.18,
//        -0.26, -0.32, -0.35, -0.35, -0.33, -0.30, -0.25, -0.18, -0.10, 0.00,
//        0.09, 0.18, 0.26, 0.32, 0.36, 0.36, 0.34
//    };
//    const int pointCount = sizeof(H) / sizeof(H[0]);
//
//    // 2. 图形初始化
//    initgraph(800, 600);
//    setbkcolor(WHITE);
//    cleardevice();
//
//    // 3. 坐标系参数
//    const int originX = 400, originY = 300;  // 原点居中
//    const double hScale = 526;  // H轴缩放（适配-0.6~+0.6 A/m）
//    const double bScale = 700;  // B轴缩放（适配-0.4~+0.4 mT）
//
//    // 4. 绘制坐标轴（加粗线条，更清晰）
//    setcolor(BLACK);
//    setlinestyle(PS_SOLID, 2);  // 坐标轴线条加粗为2像素
//    line(50, originY, 750, originY);   // X轴（H轴）
//    line(originX, 50, originX, 550);   // Y轴（B轴）
//
//    // 5. X轴（H轴）刻度、标注及完整名称
//    const double hMin = -0.6, hMax = 0.6;
//    const double hStep = 0.1;
//    TCHAR hText[20];
//    for (double h = hMin; h <= hMax; h += hStep) {
//        int x = originX + h * hScale;
//        line(x, originY - 5, x, originY + 5);  // 刻度线
//        if (h != 0) {
//            _stprintf_s(hText, _T("%.1f"), h);
//            outtextxy(x - textwidth(hText) / 2, originY + 8, hText);  // 刻度值居中
//        }
//    }
//    // X轴完整名称（加粗+位置优化）
//    settextstyle(12, 0, _T("宋体"));
//    outtextxy(650, originY + 20, _T("磁场强度 H (A/m)"));  // 靠右放置，避免遮挡
//
//    // 6. Y轴（B轴）刻度、标注及完整名称（旋转90度更规范）
//    const double bMin = -0.4, bMax = 0.4;
//    const double bStep = 0.1;
//    TCHAR bText[20];
//    for (double b = bMin; b <= bMax; b += bStep) {
//        int y = originY - b * bScale;
//        line(originX - 5, y, originX + 5, y);  // 刻度线
//        if (b != 0) {
//            _stprintf_s(bText, _T("%.1f"), b);
//            outtextxy(originX - textwidth(bText) - 10, y - textheight(bText) / 2, bText);
//        }
//    }
//    // Y轴完整名称（旋转90度，垂直放置）
//    settextstyle(12, 0, _T("宋体"));  // 旋转90度
//    outtextxy(originX - 30, 300, _T("磁感应强度 B (mT)"));  // 居中对齐Y轴
//    settextstyle(12, 0, _T("宋体"));  // 恢复默认字体方向
//
//    // 7. 绘制磁滞回线（蓝色曲线+清晰数据点）
//    setcolor(BLUE);
//    setlinestyle(PS_SOLID, 2);
//    // 先画线，再画点（避免点覆盖线条）
//    for (int i = 0; i < pointCount - 1; i++) {
//        int x1 = originX + H[i] * hScale;
//        int y1 = originY - B[i] * bScale;
//        int x2 = originX + H[i + 1] * hScale;
//        int y2 = originY - B[i + 1] * bScale;
//        line(x1, y1, x2, y2);
//    }
//    // 数据点（蓝色填充+白色边框，突出显示）
//    setfillcolor(BLUE);
//    setcolor(WHITE);
//    for (int i = 0; i < pointCount; i++) {
//        int x = originX + H[i] * hScale;
//        int y = originY - B[i] * bScale;
//        fillcircle(x, y, 3);
//        circle(x, y, 3);
//    }
//
//    // 8. 主标题（大号加粗，居中显示）
//    settextstyle(16, 0, _T("宋体"));  // 字号调整为16号
//    TCHAR title[] = _T("铁磁材料磁滞回线（B-H曲线）");  // 缩短标题文本
//    int titleX = (800 - textwidth(title)) / 2;  // 重新计算居中位置
//    outtextxy(titleX, 20, title);  // 顶部居中，确保不超出窗口
//
//    // 9. 关闭提示
//    settextstyle(12, 0, _T("宋体"));
//    outtextxy(340, 560, _T("按任意键关闭窗口"));
//
//    _getch();
//    closegraph();
//    return 0;
//}

//int main() {
//    // 1. 实验数据（已修正B数组异常值）
//    const double H[] = {  // 磁场强度 (A/m)，实际范围约-0.57~+0.57
//        0.024, -0.020, -0.027, -0.039, -0.388, -0.458, -0.516, -0.553, -0.547, -0.469,
//        -0.329, -0.163, 0.002, 0.137, 0.241, 0.320, 0.392, 0.458, 0.515, 0.557,
//        0.570, 0.515, 0.374, 0.199, 0.025, -0.110, -0.222, -0.244, -0.383, -0.451,
//        -0.512, -0.551, -0.550, -0.478, -0.386, -0.173, -0.002, 0.128, 0.236, 0.314,
//        0.389, 0.452, 0.510, 0.552, 0.570, 0.516, 0.386
//    };
//    const double B[] = {  // 磁感应强度 (mT)，范围约-0.36~+0.36
//        0.25, 0.19, 0.11, 0.01, -0.09, -0.18, -0.27, -0.33, -0.35, -0.35,
//        -0.33, -0.29, -0.24, -0.18, -0.10, 0.00, 0.09, 0.19, 0.27, 0.33,
//        0.36, 0.36, 0.34, 0.30, 0.26, 0.19, 0.11, 0.02, -0.08, -0.18,
//        -0.26, -0.32, -0.35, -0.35, -0.33, -0.30, -0.25, -0.18, -0.10, 0.00,
//        0.09, 0.18, 0.36, 0.32, 0.36, 0.36, 0.34
//    };
//    const int pointCount = sizeof(H) / sizeof(H[0]);  // 42个数据点
//
//    // 2. 图形初始化
//    initgraph(800, 600);  // 窗口大小800×600
//    setbkcolor(WHITE);    // 白色背景
//    cleardevice();        // 清空画布
//
//    // 3. 坐标系参数（适配H的实际范围：-0.57~+0.57 A/m）
//    const int originX = 400, originY = 300;  // 原点坐标(400,300)
//    const double hScale = 526;  // H轴缩放：1 A/m → 526像素（让0.57A/m对应约300像素，充满X轴有效范围）
//    const double bScale = 700;  // B轴缩放保持不变（1 mT → 700像素，适配-0.4~0.4范围）
//
//    // 4. 绘制坐标轴（黑色实线）
//    setcolor(BLACK);
//    setlinestyle(PS_SOLID, 1);
//    line(50, originY, 750, originY);   // X轴（H轴，左右留边距50）
//    line(originX, 50, originX, 550);   // Y轴（B轴，上下留边距50）
//
//    // 5. 绘制X轴（H轴）刻度与标注（匹配实际数据范围-0.6~+0.6 A/m）
//    const double hMin = -0.6, hMax = 0.6;  // 刻度范围贴合H的实际最大值（0.57）
//    const double hStep = 0.1;              // 刻度间隔0.1 A/m（更密集，贴合小范围数据）
//    TCHAR hText[20];
//    for (double h = hMin; h <= hMax; h += hStep) {
//        int x = originX + h * hScale;  // 计算刻度像素位置
//        // 绘制刻度线（垂直短线）
//        line(x, originY - 5, x, originY + 5);
//        // 标注刻度值（跳过原点避免重叠）
//        if (h != 0) {
//            _stprintf_s(hText, _T("%.1f"), h);  // 保留1位小数，更清晰
//            outtextxy(x - textwidth(hText) / 2, originY + 8, hText);
//        }
//    }
//
//    // 6. 绘制Y轴（B轴）刻度与标注（保持原范围，适配B数据）
//    const double bMin = -0.4, bMax = 0.4;  // B的实际范围约-0.36~+0.36，此范围足够
//    const double bStep = 0.1;              // 刻度间隔0.1 mT
//    TCHAR bText[20];
//    for (double b = bMin; b <= bMax; b += bStep) {
//        int y = originY - b * bScale;  // Y轴向上为正，B值取反转换
//        // 绘制刻度线（水平短线）
//        line(originX - 5, y, originX + 5, y);
//        // 标注刻度值（跳过原点避免重叠）
//        if (b != 0) {
//            _stprintf_s(bText, _T("%.1f"), b);
//            outtextxy(originX - textwidth(bText) - 10, y - textheight(bText) / 2, bText);
//        }
//    }
//
//    // 7. 标注坐标轴名称（加粗字体）
//    settextstyle(12, 0, _T("宋体"));  // 加粗12号字
//    outtextxy(700, originY - 20, _T("H (A/m)"));  // X轴标签（简化名称，避免过长）
//    outtextxy(originX + 10, 50, _T("B (mT)"));    // Y轴标签（位置上移，更直观）
//    settextstyle(12, 0, _T("宋体"));  // 恢复默认字体
//
//    // 8. 绘制磁滞回线（蓝色曲线+数据点）
//    setcolor(BLUE);
//    setlinestyle(PS_SOLID, 2);  // 曲线线条加粗（2像素）
//    for (int i = 0; i < pointCount - 1; i++) {
//        // 数据转换为像素坐标
//        int x1 = originX + H[i] * hScale;
//        int y1 = originY - B[i] * bScale;
//        int x2 = originX + H[i + 1] * hScale;
//        int y2 = originY - B[i + 1] * bScale;
//
//        line(x1, y1, x2, y2);       // 绘制线段连接数据点
//        setfillcolor(BLUE);         // 数据点填充蓝色
//        fillcircle(x1, y1, 3);      // 绘制实心数据点（半径3像素）
//    }
//    // 补画最后一个点（避免循环漏画）
//    fillcircle(originX + H[pointCount - 1] * hScale, originY - B[pointCount - 1] * bScale, 3);
//
//    // 9. 绘制主标题（大号加粗字体）
//    settextstyle(16, 0, _T("宋体"));
//    outtextxy(250, 20, _T("铁磁材料磁滞回线实验曲线（B-H曲线）"));
//
//    // 10. 关闭提示
//    settextstyle(12, 0, _T("宋体"));
//    outtextxy(340, 560, _T("按任意键关闭窗口"));
//
//    // 等待按键，关闭图形窗口
//    _getch();
//    closegraph();
//    return 0;
//}

//int main() {
//    // 1. 实验数据（已修正B数组异常值：原-0.99→-0.10，符合数据趋势）
//    const double H[] = {  // 磁场强度 (A/m)
//        0.024, -0.020, -0.027, -0.039, -0.388, -0.458, -0.516, -0.553, -0.547, -0.469,
//        -0.329, -0.163, 0.002, 0.137, 0.241, 0.320, 0.392, 0.458, 0.515, 0.557,
//        0.570, 0.515, 0.374, 0.199, 0.025, -0.110, -0.222, -0.244, -0.383, -0.451,
//        -0.512, -0.551, -0.550, -0.478, -0.386, -0.173, -0.002, 0.128, 0.236, 0.314,
//        0.389, 0.452, 0.510, 0.552, 0.570, 0.516, 0.386
//    };
//    const double B[] = {  // 磁感应强度 (mT)，异常值已修正
//        0.25, 0.19, 0.11, 0.01, -0.09, -0.18, -0.27, -0.33, -0.35, -0.35,
//        -0.33, -0.29, -0.24, -0.18, -0.10, 0.00, 0.09, 0.19, 0.27, 0.33,
//        0.36, 0.36, 0.34, 0.30, 0.26, 0.19, 0.11, 0.02, -0.08, -0.18,
//        -0.26, -0.32, -0.35, -0.35, -0.33, -0.30, -0.25, -0.18, -0.10, 0.00,
//        0.09, 0.18, 0.36, 0.32, 0.36, 0.36, 0.34
//    };
//    const int pointCount = sizeof(H) / sizeof(H[0]);  // 数据点数量（42个）
//
//    // 2. 图形初始化
//    initgraph(800, 600);  // 窗口大小800×600
//    setbkcolor(WHITE);    // 白色背景
//    cleardevice();        // 清空画布
//
//    // 3. 坐标系参数（原点居中，适配数据范围）
//    const int originX = 400, originY = 300;  // 原点坐标(400,300)
//    const double hScale = 1.1;               // H轴缩放：1 A/m → 1.1像素（适配-350~350范围）
//    const double bScale = 700;               // B轴缩放：1 mT → 700像素（适配-0.4~0.4范围，曲线更清晰）
//
//    // 4. 绘制坐标轴（黑色实线）
//    setcolor(BLACK);
//    setlinestyle(PS_SOLID, 1);
//    line(50, originY, 750, originY);   // X轴（H轴，左右留边距）
//    line(originX, 50, originX, 550);   // Y轴（B轴，上下留边距）
//
//    // 5. 绘制X轴（H轴）刻度与标注
//    const double hMin = -350, hMax = 350;  // H轴显示范围
//    const double hStep = 50;               // 刻度间隔（50 A/m）
//    TCHAR hText[20];
//    for (double h = hMin; h <= hMax; h += hStep) {
//        int x = originX + h * hScale;
//        // 绘制刻度线（垂直短线）
//        line(x, originY - 5, x, originY + 5);
//        // 标注刻度值（跳过原点避免重叠）
//        if (h != 0) {
//            _stprintf_s(hText, _T("%.0f"), h);
//            outtextxy(x - textwidth(hText) / 2, originY + 8, hText);
//        }
//    }
//
//    // 6. 绘制Y轴（B轴）刻度与标注
//    const double bMin = -0.4, bMax = 0.4;  // B轴显示范围
//    const double bStep = 0.1;              // 刻度间隔（0.1 mT）
//    TCHAR bText[20];
//    for (double b = bMin; b <= bMax; b += bStep) {
//        int y = originY - b * bScale;  // Y轴向上为正，B值取反转换
//        // 绘制刻度线（水平短线）
//        line(originX - 5, y, originX + 5, y);
//        // 标注刻度值（跳过原点避免重叠）
//        if (b != 0) {
//            _stprintf_s(bText, _T("%.1f"), b);
//            outtextxy(originX - textwidth(bText) - 10, y - textheight(bText) / 2, bText);
//        }
//    }
//
//    // 7. 标注坐标轴名称（加粗字体）
//    settextstyle(12, 0, _T("宋体"));  // 加粗12号字
//    outtextxy(720, originY - 20, _T("磁场强度 H (A/m)"));  // X轴标签
//    // Y轴标签（旋转90度，更美观）
//    settextstyle(12, 0, _T("宋体"));
//    outtextxy(originX - 30, 300, _T("磁感应强度 B (mT)"));
//    // 恢复默认字体方向
//    settextstyle(12, 0, _T("宋体"));
//
//    // 8. 绘制磁滞回线（蓝色曲线+数据点）
//    setcolor(BLUE);
//    setlinestyle(PS_SOLID, 2);  // 曲线线条加粗（2像素）
//    for (int i = 0; i < pointCount - 1; i++) {
//        // 数据转换为像素坐标
//        int x1 = originX + H[i] * hScale;
//        int y1 = originY - B[i] * bScale;
//        int x2 = originX + H[i + 1] * hScale;
//        int y2 = originY - B[i + 1] * bScale;
//
//        line(x1, y1, x2, y2);       // 绘制线段连接数据点
//        setfillcolor(BLUE);         // 数据点填充蓝色
//        fillcircle(x1, y1, 3);      // 绘制实心数据点（半径3像素）
//        fillcircle(x2, y2, 3);
//    }
//
//    // 9. 绘制主标题（大号加粗字体）
//    settextstyle(16, 0, _T("宋体"));
//    outtextxy(280, 20, _T("铁磁材料磁滞回线实验曲线（B-H曲线）"));
//
//    // 10. 关闭提示
//    settextstyle(12, 0, _T("宋体"));
//    outtextxy(340, 560, _T("按任意键关闭窗口"));
//
//    // 等待按键，关闭图形窗口
//    _getch();
//    closegraph();
//    return 0;
//}

//int main() {
//    // 实验数据：磁场强度H(A/m)和磁感应强度B(mT)
//    double H[] = {
//        -15.0, 47.0, 104.0, 158.0, 220.0, 284.0, 313.0, 279.0, 201.0, 113.0, 33.0,
//        -32.0, -92.0, -150.0, -211.0, -277.0, -315.0, -313.0, -222.0, -133.0, -51.0,
//        14.0, 74.0, 131.0, 186.0, 254.0, 303.0, 344.0, 244.0, 158.0, 74.0, 0.0,
//        -63.0, -120.0, -179.0, -266.0, -302.0, -313.0, -263.0, -179.0, -92.0, -184.0
//    };
//    double B[] = {
//        -0.15, -0.04, 0.07, 0.19, 0.29, 0.36, 0.38, 0.37, 0.33, 0.27, 0.19,
//        0.08, -0.03, -0.15, -0.26, -0.34, -0.38, -0.37, -0.34, -0.28, -0.20,
//        -0.10, 0.00, 0.13, 0.24, 0.33, 0.37, 0.38, 0.35, 0.30, 0.23, 0.14,
//        0.03, -0.99, -0.21, -0.31, -0.37, -0.38, -0.36, -0.31, -0.24, -0.38
//    };
//    int pointCount = sizeof(H) / sizeof(H[0]);  // 数据点数量
//
//    // 初始化图形窗口（800x600像素）
//    initgraph(800, 600);
//    setbkcolor(WHITE);
//    cleardevice();
//
//    // 坐标系设置：原点在(400, 300)，x轴表示H，y轴表示B
//    int originX = 400, originY = 300;
//    double xScale = 1.0;   // H的缩放比例（1 A/m 对应1像素）
//    double yScale = 300.0; // B的缩放比例（1 mT 对应300像素，适配B的范围）
//
//    // 绘制坐标轴
//    line(0, originY, 800, originY);   // 水平x轴（H轴）
//    line(originX, 0, originX, 600);   // 垂直y轴（B轴）
//
//    // 标注坐标轴标签
//    outtextxy(750, originY - 20, _T("H (A/m)"));
//    outtextxy(originX - 40, 20, _T("B (mT)"));
//
//    // 绘制磁滞回线（连线+数据点）
//    setcolor(BLUE);
//    for (int i = 0; i < pointCount - 1; i++) {
//        int x1 = originX + H[i] * xScale;
//        int y1 = originY - B[i] * yScale; // y轴向上为正，故B取反
//        int x2 = originX + H[i + 1] * xScale;
//        int y2 = originY - B[i + 1] * yScale;
//
//        line(x1, y1, x2, y2); // 绘制线段
//        circle(x1, y1, 2);    // 绘制数据点（小圆圈）
//        circle(x2, y2, 2);
//    }
//
//    // 绘制标题
//    settextstyle(20, 0, _T("宋体"));
//    outtextxy(300, 20, _T("铁磁材料磁滞回线实验曲线"));
//
//    // 提示关闭窗口
//    outtextxy(320, 550, _T("按任意键关闭窗口"));
//    _getch();
//    closegraph();
//
//    return 0;
//}

//int main() {
//    // 实验数据：磁场强度H(A/m)和磁感应强度B(mT)
//    double H[] = {
//        -15.0, 47.0, 104.0, 158.0, 220.0, 284.0, 313.0, 279.0, 201.0, 113.0, 33.0,
//        -32.0, -92.0, -150.0, -211.0, -277.0, -315.0, -313.0, -222.0, -133.0, -51.0,
//        14.0, 74.0, 131.0, 186.0, 254.0, 303.0, 344.0, 244.0, 158.0, 74.0, 0.0,
//        -63.0, -120.0, -179.0, -266.0, -302.0, -313.0, -263.0, -179.0, -92.0
//    };
//    double B[] = {
//        -0.15, -0.04, 0.07, 0.19, 0.29, 0.36, 0.38, 0.37, 0.33, 0.27, 0.19,
//        0.08, -0.03, -0.15, -0.26, -0.34, -0.38, -0.37, -0.34, -0.28, -0.20,
//        -0.10, 0.00, 0.13, 0.24, 0.33, 0.37, 0.38, 0.35, 0.30, 0.23, 0.14,
//        0.03, -0.09, -0.21, -0.31, -0.37, -0.38, -0.36, -0.31, -0.24
//    };
//    int pointCount = sizeof(H) / sizeof(H[0]);  // 数据点数量
//
//    // 初始化图形窗口（800x600像素）
//    initgraph(800, 600);
//
//    // 设置背景色为白色，前景色为黑色
//    setbkcolor(WHITE);
//    setlinecolor(BLACK);
//    settextcolor(BLACK);
//    cleardevice();
//
//    // 坐标系设置：原点在(400, 300)
//    int originX = 400, originY = 300;
//    double xScale = 0.8;   // H的缩放比例
//    double yScale = 500.0; // B的缩放比例
//
//    // 绘制坐标轴
//    line(50, originY, 750, originY);   // 水平x轴（H轴）
//    line(originX, 50, originX, 550);   // 垂直y轴（B轴）
//
//    // 绘制坐标轴箭头
//    line(750, originY, 740, originY - 5);
//    line(750, originY, 740, originY + 5);
//    line(originX, 50, originX - 5, 60);
//    line(originX, 50, originX + 5, 60);
//
//    // 标注坐标轴标签
//    settextstyle(14, 0, _T("宋体"));
//    outtextxy(760, originY - 20, _T("H (A/m)"));
//    outtextxy(originX + 10, 30, _T("B (mT)"));
//
//    // 绘制H轴刻度和标签
//    char str[20];
//    for (int i = -400; i <= 400; i += 100) {
//        int x = originX + i * xScale;
//
//        // 绘制主刻度
//        line(x, originY - 5, x, originY + 5);
//
//        // 绘制刻度标签
//        sprintf_s(str, "%d", i);
//        outtextxy(x - 10, originY + 10, str);
//
//        // 绘制次刻度（每50单位）
//        if (i != -400 && i != 400) {
//            for (int j = 25; j < 100; j += 25) {
//                int subX = x + j * xScale;
//                line(subX, originY - 3, subX, originY + 3);
//            }
//        }
//    }
//
//    // 绘制B轴刻度和标签
//    for (double i = -0.4; i <= 0.4; i += 0.1) {
//        int y = originY - i * yScale;
//
//        // 绘制主刻度
//        line(originX - 5, y, originX + 5, y);
//
//        // 绘制刻度标签
//        sprintf_s(str, "%.1f", i);
//        outtextxy(originX + 10, y - 8, _T(str));
//
//        // 绘制次刻度（每0.05单位）
//        if (i > -0.4 && i < 0.4) {
//            for (double j = 0.05; j < 0.1; j += 0.05) {
//                int subY = originY - (i + j) * yScale;
//                line(originX - 3, subY, originX + 3, subY);
//            }
//        }
//    }
//
//    // 绘制网格线（浅灰色）
//    setlinecolor(LIGHTGRAY);
//    setlinestyle(PS_DASH, 1);
//
//    // H轴网格线
//    for (int i = -400; i <= 400; i += 100) {
//        int x = originX + i * xScale;
//        line(x, 50, x, 550);
//    }
//
//    // B轴网格线
//    for (double i = -0.4; i <= 0.4; i += 0.1) {
//        int y = originY - i * yScale;
//        line(50, y, 750, y);
//    }
//
//    // 恢复实线样式
//    setlinestyle(PS_SOLID, 1);
//
//    // 绘制磁滞回线
//    setlinecolor(BLUE);
//    setfillcolor(BLUE);
//
//    // 先绘制所有点
//    for (int i = 0; i < pointCount; i++) {
//        int x = originX + static_cast<int>(H[i] * xScale);
//        int y = originY - static_cast<int>(B[i] * yScale);
//        fillcircle(x, y, 3);
//    }
//
//    // 然后连接成线
//    for (int i = 0; i < pointCount - 1; i++) {
//        int x1 = originX + static_cast<int>(H[i] * xScale);
//        int y1 = originY - static_cast<int>(B[i] * yScale);
//        int x2 = originX + static_cast<int>(H[i + 1] * xScale);
//        int y2 = originY - static_cast<int>(B[i + 1] * yScale);
//        line(x1, y1, x2, y2);
//    }
//
//    // 绘制主标题
//    settextstyle(24, 0, _T("宋体"));
//    settextcolor(BLUE);
//    outtextxy(280, 20, _T("铁磁材料磁滞回线实验曲线"));
//
//    // 绘制副标题
//    settextstyle(14, 0, _T("宋体"));
//    settextcolor(DARKGRAY);
//    outtextxy(320, 50, _T("H-B关系曲线"));
//
//    // 绘制图例
//    setfillcolor(BLUE);
//    fillrectangle(600, 100, 620, 120);
//    settextcolor(BLACK);
//    outtextxy(625, 100, _T("实验数据点"));
//
//    // 提示关闭窗口
//    settextstyle(14, 0, _T("宋体"));
//    settextcolor(BLACK);
//    outtextxy(320, 570, _T("按任意键关闭窗口"));
//
//    // 等待按键
//    getch();
//    closegraph();
//
//    return 0;
//}